package com.atbeijing.bigdata.spark.core.rdd.instance

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object Spark01_Instance_Memory_Par {

    def main(args: Array[String]): Unit = {

        val conf = new SparkConf().setMaster("local").setAppName("Instance")
        conf.set("spark.default.parallelism", "4")
        val sc = new SparkContext(conf)

        // TODO  RDD - 创建 - 从内存中
        val seq = Seq(1,2,3,4)

        // makeRDD方法有两个参数
        // 第一个参数表示需要处理的数据集
        // 第二个参数表示切片（分区）的数量， 如果传递这个参数，会使用默认值
        // 底层源码实现（local）: scheduler.conf.getInt("spark.default.parallelism", totalCores)
        //    从SparkConf配置对象中获取配置参数，如果获取不到，那么会将当前环境中的最大核数来使用
        // 底层源码实现（集群）：conf.getInt("spark.default.parallelism", math.max(totalCoreCount.get(), 2))
        //    从SparkConf配置对象中获取配置参数，如果获取不到，那么会将当前环境中的最大核数和2做比较，取较大的那个值
        //
        // TODO 传递的分区参数 => 配置参数 => 默认值
        //val rdd: RDD[Int] = sc.makeRDD(seq, 2)
        val rdd: RDD[Int] = sc.makeRDD(seq)

        //println(rdd.partitions.length)
        // 将数据的处理结果保存为分区文件，每个分区保存成一份文件
        rdd.saveAsTextFile("output")

        sc.stop()
    }
}
